#!/bin/bash

# test_issue_005.sh - 测试不同车系页面结构差异的修复
# Issue #005: 不同车系页面结构差异导致Trim抓取失败

echo "🔥 Issue #005 验证脚本 - 不同车系页面结构差异修复测试"
echo "================================================"

# 服务器信息
SERVER_URL="http://localhost:5700"
API_BASE="${SERVER_URL}/api"

# 测试车型列表 (不同页面类型)
TEST_MODELS=("Puma" "Focus" "Focus ST" "Fiesta" "Kuga" "Mustang")

# 获取模型对应的页面类型
get_page_type() {
    local model="$1"
    case "$model" in
        "Puma")
            echo "modern"    # 现代布局：有trim对比和规格
            ;;
        "Focus")
            echo "classic"   # 经典布局：功能介绍为主
            ;;
        "Focus ST")
            echo "performance"  # 性能车型：特殊布局
            ;;
        "Fiesta")
            echo "classic"   # 经典布局
            ;;
        "Kuga")
            echo "classic"   # 经典布局
            ;;
        "Mustang")
            echo "performance"   # 性能车型
            ;;
        *)
            echo "unknown"
            ;;
    esac
}

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 检查服务器是否运行
check_server() {
    echo -n "检查服务器状态... "
    if curl -s "$SERVER_URL/api/vehicles" > /dev/null 2>&1; then
        echo -e "${GREEN}✅ 服务器运行正常${NC}"
        return 0
    else
        echo -e "${RED}❌ 服务器未运行，请先启动服务器${NC}"
        echo "启动命令: go run cmd/main.go"
        exit 1
    fi
}

# 测试单个车型的trim抓取
test_trim_scraping() {
    local model="$1"
    local expected_type="$2"
    
    echo ""
    echo -e "${BLUE}📋 测试车型: $model (预期类型: $expected_type)${NC}"
    echo "----------------------------------------"
    
    # 1. 抓取trim信息
    echo -n "  抓取trim信息... "
    scrape_response=$(curl -s -X POST "$API_BASE/scrape_trims?model=$model")
    
    if echo "$scrape_response" | grep -q "error"; then
        echo -e "${RED}❌ 抓取失败${NC}"
        echo "    错误信息: $scrape_response"
        return 1
    else
        echo -e "${GREEN}✅ 抓取成功${NC}"
    fi
    
    # 2. 获取trim列表
    echo -n "  获取trim列表... "
    trims_response=$(curl -s "$API_BASE/get_trims?model=$model")
    
    if echo "$trims_response" | grep -q "error"; then
        echo -e "${RED}❌ 获取失败${NC}"
        echo "    错误信息: $trims_response"
        return 1
    fi
    
    # 解析trim数量
    trim_count=$(echo "$trims_response" | jq -r '.total_trims' 2>/dev/null || echo "0")
    echo -e "${GREEN}✅ 找到 $trim_count 个trim配置${NC}"
    
    # 3. 检查规格信息
    if [ "$trim_count" -gt 0 ]; then
        # 获取第一个trim的名称
        first_trim=$(echo "$trims_response" | jq -r '.trims[0].trim_info.trim_name' 2>/dev/null)
        
        if [ "$first_trim" != "null" ] && [ "$first_trim" != "" ]; then
            echo -n "  检查规格信息 ($first_trim)... "
            
            # 从trims响应中获取规格数量
            specs_count=$(echo "$trims_response" | jq -r '.trims[0].specs_count' 2>/dev/null || echo "0")
            
            if [ "$specs_count" != "null" ] && [ "$specs_count" != "" ]; then
                echo -e "${GREEN}✅ 找到 $specs_count 项规格${NC}"
                
                # 检查SeeFullSpecsAvailable状态
                see_full_specs=$(echo "$trims_response" | jq -r '.trims[0].trim_info.see_full_specs_available' 2>/dev/null)
                echo "    SeeFullSpecsAvailable: $see_full_specs"
            else
                echo -e "${RED}❌ 规格信息不可用${NC}"
            fi
        fi
    fi
    
    # 4. 根据页面类型验证结果
    case "$expected_type" in
        "modern")
            # 现代布局应该有较多trim和详细规格
            if [ "$trim_count" -ge 2 ]; then
                echo -e "  ${GREEN}✅ 现代布局验证通过: 有 $trim_count 个trim配置${NC}"
            else
                echo -e "  ${YELLOW}⚠️  现代布局警告: trim数量较少 ($trim_count)${NC}"
            fi
            ;;
        "classic")
            # 经典布局trim较少，规格基础
            if [ "$trim_count" -ge 1 ]; then
                echo -e "  ${GREEN}✅ 经典布局验证通过: 基础trim信息可用${NC}"
            else
                echo -e "  ${RED}❌ 经典布局失败: 无trim信息${NC}"
            fi
            ;;
        "performance")
            # 性能车型应该有特殊配置
            if [ "$trim_count" -ge 1 ]; then
                echo -e "  ${GREEN}✅ 性能车型验证通过: 有 $trim_count 个配置${NC}"
            else
                echo -e "  ${RED}❌ 性能车型失败: 无配置信息${NC}"
            fi
            ;;
    esac
    
    return 0
}

# 生成测试报告
generate_report() {
    local total_tests="$1"
    local passed_tests="$2"
    local failed_tests="$3"
    
    echo ""
    echo "================================================"
    echo -e "${BLUE}📊 Issue #005 测试报告${NC}"
    echo "================================================"
    echo "测试总数: $total_tests"
    echo -e "通过数量: ${GREEN}$passed_tests${NC}"
    echo -e "失败数量: ${RED}$failed_tests${NC}"
    
    if [ "$failed_tests" -eq 0 ]; then
        echo -e "${GREEN}🎉 所有测试通过！Issue #005 修复验证成功！${NC}"
        echo ""
        echo "✅ 不同页面类型适配功能正常工作"
        echo "✅ 现代布局车型 (如Puma) 支持完整trim对比"
        echo "✅ 经典布局车型 (如Focus) 支持基础信息抓取"
        echo "✅ 性能车型支持特殊配置处理"
        echo "✅ 未知车型有降级处理机制"
    else
        echo -e "${RED}❌ 存在失败的测试，需要进一步检查${NC}"
        echo ""
        echo "建议检查:"
        echo "1. 服务器日志中的页面类型检测信息"
        echo "2. 不同车型的抓取策略是否正确应用"
        echo "3. 数据库中的trim和specs数据是否正确保存"
    fi
    
    echo ""
    echo "💡 查看详细日志: tail -f logs/spam3uk.log"
    echo "💡 检查数据库: 查看trim_info和trim_specs_info表"
}

# 主测试流程
main() {
    echo "开始测试时间: $(date)"
    echo ""
    
    # 检查服务器
    check_server
    
    # 初始化计数器
    total_tests=0
    passed_tests=0
    failed_tests=0
    
    # 测试每个车型
    for model in "${TEST_MODELS[@]}"; do
        expected_type=$(get_page_type "$model")
        
        ((total_tests++))
        
        if test_trim_scraping "$model" "$expected_type"; then
            ((passed_tests++))
        else
            ((failed_tests++))
        fi
        
        # 短暂暂停，避免请求过于频繁
        sleep 1
    done
    
    # 生成报告
    generate_report "$total_tests" "$passed_tests" "$failed_tests"
    
    # 返回适当的退出码
    if [ "$failed_tests" -eq 0 ]; then
        exit 0
    else
        exit 1
    fi
}

# 运行主函数
main "$@"
